#ifndef _INDICE_H_
#define _INDICE_H_

/********************************************************************
 * Indice.h
 * 
 * Descripcion :Esta clase representa un archivo de indice primario.
*********************************************************************/

#include "archivo.h"
#include <climits>

class Indice: public Archivo{
	public:
		static int VACIO;
		
		Indice(std::string& nombre, unsigned int tam_bloque):Archivo(nombre,tam_bloque){}
		
		virtual ~Indice(){}
		
		virtual void crear() throw(ExcepCreandoArch, ExcepSintaxisParser, ExcepBloqueTam) =0; 
		
		virtual void abrir() throw(ExcepAbriendoArch) =0;
		
		virtual void cerrar() =0;
 		
 		virtual void eliminar() =0;
 		
 		virtual TiposArchivo get_tipo_archivo()=0;
 		
 		virtual unsigned int get_espacio_libre()  throw(ExcepArchCerrado, ExcepLeerBloque) =0;
 		
 		virtual void ingresar(TipoDato* clave, int num_bloque) throw(ExcepArchCerrado,ExcepRegExistente, ExcepBloqueTam)=0;
		
		virtual void quitar(TipoDato* clave) throw(ExcepArchCerrado)=0;
		
		virtual unsigned int consultar(TipoDato* clave) throw(ExcepArchCerrado,ExcepLeerBloque)=0;
 
 		virtual void actualizar(TipoDato* clave, int bloque_nuevo) throw(ExcepArchCerrado,ExcepRegInexistente, ExcepBloqueTam)=0;
 		
 		virtual unsigned int get_cant_regs() = 0;
 		
 		/*
		 * Devuelve el tamano ocupado por el archivo, en bytes
		 */ 
		virtual long get_tam() throw(ExcepArchCerrado) = 0;										
};

#endif

